ZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvLmdpdGlnbm9yZSBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQxOWQwCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjggQEAKKyMjIyBTVFMgIyMjCisuYXB0X2dlbmVyYXRlZAorLmNsYXNzcGF0aAorLmZhY3RvcnlwYXRoCisucHJvamVjdAorLnNldHRpbmdzCisuc3ByaW5nQmVhbnMKKy5zdHM0LWNhY2hlCisKKy5jbGFzc3BhdGgKKy5zZXR0aW5ncy8KKworIyBUYXJnZXQgZGlycyBpbiBhbGwgcHJvamVjdHMKKyoqL3RhcmdldC1pZGUvKgorKiovdGFyZ2V0LyoKKyoqL2xvZ3MvKgorKiovdG9rZW5zLyoKKworIyBBZGRlZCBmb3IgSW50ZWxsaWogSURFQSBJREUKKyoqL2RlYnVnLWxvZ3MvKgorKiovLmlkZWEvKgorKiovKi5pbWwKKyoqLyoucHJvamVjdAorKiovLnNwcmluZ0JlYW5zCisKKyoqLyp2ZXJzaW9uc0JhY2t1cAorKiovYmxhY2tEdWNrSHViKgorKiovKi5qc29ubGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3BvbS54bWwgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0MjI2MAotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvYXBwbGljYXRpb24vcG9tLnhtbApAQCAtMCwwICsxLDU5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICB+ICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LgorICB+CisgIH4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+ICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5wYXJlbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjAuMC4zLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BhcmVudDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPmFwcGxpY2F0aW9uPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+Qmx1ZXByaW50cyBQcm9jZXNzb3IgQXBwbGljYXRpb248L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkJsdWVwcmludHMgUHJvY2Vzc29yIEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3QtZGV2dG9vbHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Q8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLXdlYjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnJlc291cmNlLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlbGZzZXJ2aWNlLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvYXBwbGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3IvQmx1ZXByaW50UHJvY2Vzc29yQXBwbGljYXRpb24uamF2YSBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvYXBwbGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3IvQmx1ZXByaW50UHJvY2Vzc29yQXBwbGljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTEzZjkyCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9hcHBsaWNhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9vbmFwL2Njc2RrL2FwcHMvYmx1ZXByaW50c3Byb2Nlc3Nvci9CbHVlcHJpbnRQcm9jZXNzb3JBcHBsaWNhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8qDQorICogIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQorICoNCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I7DQorDQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC5TcHJpbmdBcHBsaWNhdGlvbjsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LmF1dG9jb25maWd1cmUuRW5hYmxlQXV0b0NvbmZpZ3VyYXRpb247DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC5hdXRvY29uZmlndXJlLlNwcmluZ0Jvb3RBcHBsaWNhdGlvbjsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQ29tcG9uZW50U2NhbjsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIucmVhY3RpdmUuY29uZmlnLkVuYWJsZVdlYkZsdXg7DQorDQorLyoqDQorICogQmx1ZXByaW50UHJvY2Vzc29yQXBwbGljYXRpb24NCisgKg0KKyAqIEBhdXRob3IgQnJpbmRhIFNhbnRoIDgvMTQvMjAxOA0KKyAqLw0KK0BTcHJpbmdCb290QXBwbGljYXRpb24NCitARW5hYmxlQXV0b0NvbmZpZ3VyYXRpb24NCitARW5hYmxlV2ViRmx1eA0KK0BDb21wb25lbnRTY2FuKGJhc2VQYWNrYWdlcyA9IHsib3JnLm9uYXAuY2NzZGsuYXBwcy5jb250cm9sbGVyYmx1ZXByaW50cyIsDQorICAgICAgICAib3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yIn0pDQorcHVibGljIGNsYXNzIEJsdWVwcmludFByb2Nlc3NvckFwcGxpY2F0aW9uIHsNCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKyAgICAgICAgU3ByaW5nQXBwbGljYXRpb24ucnVuKEJsdWVwcmludFByb2Nlc3NvckFwcGxpY2F0aW9uLmNsYXNzLCBhcmdzKTsNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3NyYy9tYWluL2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL1N3YWdnZXJDb25maWcuamF2YSBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvYXBwbGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3IvU3dhZ2dlckNvbmZpZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNWY2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3NyYy9tYWluL2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL1N3YWdnZXJDb25maWcuamF2YQpAQCAtMCwwICsxLDcyIEBACisvKg0KKyAqICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqDQorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yOw0KKw0KK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOw0KK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQmVhbjsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQ29tcG9uZW50U2NhbjsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQ29uZmlndXJhdGlvbjsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNYXBwaW5nOw0KK2ltcG9ydCBzcHJpbmdmb3guZG9jdW1lbnRhdGlvbi5idWlsZGVycy5QYXRoU2VsZWN0b3JzOw0KK2ltcG9ydCBzcHJpbmdmb3guZG9jdW1lbnRhdGlvbi5idWlsZGVycy5SZXF1ZXN0SGFuZGxlclNlbGVjdG9yczsNCitpbXBvcnQgc3ByaW5nZm94LmRvY3VtZW50YXRpb24uc2VydmljZS5BcGlJbmZvOw0KK2ltcG9ydCBzcHJpbmdmb3guZG9jdW1lbnRhdGlvbi5zZXJ2aWNlLkNvbnRhY3Q7DQoraW1wb3J0IHNwcmluZ2ZveC5kb2N1bWVudGF0aW9uLnNwaS5Eb2N1bWVudGF0aW9uVHlwZTsNCitpbXBvcnQgc3ByaW5nZm94LmRvY3VtZW50YXRpb24uc3ByaW5nLndlYi5wbHVnaW5zLkRvY2tldDsNCitpbXBvcnQgc3ByaW5nZm94LmRvY3VtZW50YXRpb24uc3dhZ2dlcjIuYW5ub3RhdGlvbnMuRW5hYmxlU3dhZ2dlcjI7DQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQorDQorLyoqDQorICogU3dhZ2dlckNvbmZpZw0KKyAqDQorICogQGF1dGhvciBCcmluZGEgU2FudGggOC8xMy8yMDE4DQorICovDQorQENvbmZpZ3VyYXRpb24NCitARW5hYmxlU3dhZ2dlcjINCitwdWJsaWMgY2xhc3MgU3dhZ2dlckNvbmZpZyB7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IERFRkFVTFRfUFJPRFVDRVNfQU5EX0NPTlNVTUVTID0NCisgICAgICAgICAgICBuZXcgSGFzaFNldDxTdHJpbmc+KEFycmF5cy5hc0xpc3QoImFwcGxpY2F0aW9uL2pzb24iLA0KKyAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uL3htbCIpKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFN3YWdnZXJDb25maWcuY2xhc3MpOw0KKw0KKyAgICBAQmVhbg0KKyAgICBwdWJsaWMgRG9ja2V0IGFwaSgpIHsNCisgICAgICAgIHJldHVybiBuZXcgRG9ja2V0KERvY3VtZW50YXRpb25UeXBlLlNXQUdHRVJfMikNCisgICAgICAgICAgICAgICAgLnNlbGVjdCgpDQorICAgICAgICAgICAgICAgIC5hcGlzKFJlcXVlc3RIYW5kbGVyU2VsZWN0b3JzLmFueSgpKQ0KKyAgICAgICAgICAgICAgICAucGF0aHMoUGF0aFNlbGVjdG9ycy5hbnkoKSkNCisgICAgICAgICAgICAgICAgLmJ1aWxkKCkNCisgICAgICAgICAgICAgICAgLmFwaUluZm8oYXBpSW5mbygpKTsNCisgICAgfQ0KKw0KKyAgICBwcml2YXRlIEFwaUluZm8gYXBpSW5mbygpIHsNCisgICAgICAgIHJldHVybiBuZXcgQXBpSW5mbygNCisgICAgICAgICAgICAgICAgIkJsdWVwcmludHMgUHJvY2Vzc29yIEFQSSIsDQorICAgICAgICAgICAgICAgICJDb250cm9sbGVyIGJsdWVwcmludHMgcHJvY2Vzc29yIEFQSSBmb3IgVk5GIFNlbGZzZXJ2aWNlLiIsDQorICAgICAgICAgICAgICAgICIxLjAuMCIsDQorICAgICAgICAgICAgICAgICJUZXJtcyBvZiBzZXJ2aWNlIiwNCisgICAgICAgICAgICAgICAgbmV3IENvbnRhY3QoIkJyaW5kYSBTYW50aCIsICJ3d3cub25hcC5jb20iLCAiYnMyNzk2QG9uYXAuY29tIiksDQorICAgICAgICAgICAgICAgICJBcGFjaGUgMi4wIiwgImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCIsIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsNCisgICAgfQ0KKw0KKw0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3NyYy9tYWluL2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL1dlYkNvbmZpZy5qYXZhIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9hcHBsaWNhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9vbmFwL2Njc2RrL2FwcHMvYmx1ZXByaW50c3Byb2Nlc3Nvci9XZWJDb25maWcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWI4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9hcHBsaWNhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9vbmFwL2Njc2RrL2FwcHMvYmx1ZXByaW50c3Byb2Nlc3Nvci9XZWJDb25maWcuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKg0KKyAqICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqDQorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yOw0KKw0KK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOw0KK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQ29uZmlndXJhdGlvbjsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5mb3JtYXQuRm9ybWF0dGVyUmVnaXN0cnk7DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLnJlYWN0aXZlLmNvbmZpZy4qOw0KKw0KKy8qKg0KKyAqIFdlYkNvbmZpZw0KKyAqDQorICogQGF1dGhvciBCcmluZGEgU2FudGggOC8xMy8yMDE4DQorICovDQorQENvbmZpZ3VyYXRpb24NCitwdWJsaWMgY2xhc3MgV2ViQ29uZmlnIGV4dGVuZHMgV2ViRmx1eENvbmZpZ3VyYXRpb25TdXBwb3J0IHsNCisgICAgcHVibGljIHZvaWQgYWRkUmVzb3VyY2VIYW5kbGVycyhSZXNvdXJjZUhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSkgew0KKyAgICAgICAgcmVnaXN0cnkuYWRkUmVzb3VyY2VIYW5kbGVyKCJzd2FnZ2VyLXVpLmh0bWwiKQ0KKyAgICAgICAgICAgICAgICAuYWRkUmVzb3VyY2VMb2NhdGlvbnMoImNsYXNzcGF0aDovTUVUQS1JTkYvcmVzb3VyY2VzLyIpOw0KKw0KKyAgICAgICAgcmVnaXN0cnkuYWRkUmVzb3VyY2VIYW5kbGVyKCIvd2ViamFycy8qKiIpDQorICAgICAgICAgICAgICAgIC5hZGRSZXNvdXJjZUxvY2F0aW9ucygiY2xhc3NwYXRoOi9NRVRBLUlORi9yZXNvdXJjZXMvd2ViamFycy8iKTsNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9hcHBsaWNhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzBhN2YxCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9hcHBsaWNhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjDQorIyAgQ29weXJpZ2h0IKkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyMNCisjICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisjICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorIyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIw0KKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjDQorIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvYXBwbGljYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2sueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2JiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLnhtbApAQCAtMCwwICsxLDM2IEBACis8IS0tDQorICB+ICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAgfg0KKyAgfiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICB+ICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgIH4NCisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgIH4NCisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgIH4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICB+ICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgLS0+DQorDQorPGNvbmZpZ3VyYXRpb24+DQorICAgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+DQorICAgICAgICA8IS0tIGVuY29kZXJzIGFyZSBhc3NpZ25lZCB0aGUgdHlwZQ0KKyAgICAgICAgICAgICBjaC5xb3MubG9nYmFjay5jbGFzc2ljLmVuY29kZXIuUGF0dGVybkxheW91dEVuY29kZXIgYnkgZGVmYXVsdCAtLT4NCisgICAgICAgIDxlbmNvZGVyPg0KKyAgICAgICAgICAgIDxwYXR0ZXJuPiVke0hIOm1tOnNzLlNTU30gJS01bGV2ZWwgJWxvZ2dlcnsxMDB9IC0gJW1zZyVuPC9wYXR0ZXJuPg0KKyAgICAgICAgPC9lbmNvZGVyPg0KKyAgICA8L2FwcGVuZGVyPg0KKw0KKw0KKyAgICA8bG9nZ2VyIG5hbWU9Im9yZy5zcHJpbmdmcmFtZXdvcmsiIGxldmVsPSJpbmZvIi8+DQorICAgIDxsb2dnZXIgbmFtZT0ib3JnLnNwcmluZ2ZyYW1ld29yay53ZWIiIGxldmVsPSJpbmZvIi8+DQorICAgIDxsb2dnZXIgbmFtZT0ib3JnLmhpYmVybmF0ZSIgbGV2ZWw9ImVycm9yIi8+DQorICAgIDxsb2dnZXIgbmFtZT0ib3JnLm9uYXAuY2NzZGsuYXBwcyIgbGV2ZWw9ImluZm8iLz4NCisNCisgICAgPHJvb3QgbGV2ZWw9Indhcm4iPg0KKyAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIvPg0KKyAgICA8L3Jvb3Q+DQorDQorPC9jb25maWd1cmF0aW9uPg0KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvYXBwbGljYXRpb24vc3JjL3Rlc3QvamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3IvQmx1ZXByaW50UHJvY2Vzc29yQXBwbGljYXRpb25UZXN0LmphdmEgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3NyYy90ZXN0L2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL0JsdWVwcmludFByb2Nlc3NvckFwcGxpY2F0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYmExZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2FwcGxpY2F0aW9uL3NyYy90ZXN0L2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL0JsdWVwcmludFByb2Nlc3NvckFwcGxpY2F0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8qDQorICogIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQorICoNCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I7DQorDQorDQoraW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7DQoraW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7DQoraW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LkFwcGxpY2F0aW9uQ29udGV4dDsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LmNvbnRleHQuQ29udGV4dENvbmZpZ3VyYXRpb247DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsudGVzdC5jb250ZXh0Lmp1bml0NC5TcHJpbmdSdW5uZXI7DQorDQorLyoqDQorICogQmx1ZXByaW50UHJvY2Vzc29yQXBwbGljYXRpb25UZXN0DQorICoNCisgKiBAYXV0aG9yIEJyaW5kYSBTYW50aA0KKyAqIERBVEUgOiA4LzE0LzIwMTgNCisgKi8NCisNCitAUnVuV2l0aChTcHJpbmdSdW5uZXIuY2xhc3MpDQorQENvbnRleHRDb25maWd1cmF0aW9uKGNsYXNzZXMgPSBCbHVlcHJpbnRQcm9jZXNzb3JBcHBsaWNhdGlvbi5jbGFzcykNCisvL0BTcHJpbmdCb290VGVzdChjbGFzc2VzID0gQmx1ZXByaW50UHJvY2Vzc29yQXBwbGljYXRpb24uY2xhc3MsDQorLy8gICAgICAgIHdlYkVudmlyb25tZW50ID0gU3ByaW5nQm9vdFRlc3QuV2ViRW52aXJvbm1lbnQuUkFORE9NX1BPUlQpDQorcHVibGljIGNsYXNzIEJsdWVwcmludFByb2Nlc3NvckFwcGxpY2F0aW9uVGVzdCB7DQorDQorICAgIEBBdXRvd2lyZWQNCisgICAgcHJpdmF0ZSBBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dDsNCisNCisgICAgQEJlZm9yZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsNCisNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2FtcGxlKCl7DQorICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiRmFpbGVkIHRvIGNyZWF0ZSBBcHBsaWNhdGlvbiBDb250ZXh0ICIsIGNvbnRleHQpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9jb21tb25zL2FkYXB0b3JzL3BvbS54bWwgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9hZGFwdG9ycy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZDdkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9hZGFwdG9ycy9wb20ueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIH4gIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuCisgIH4KKyAgfiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5jb21tb25zPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjAuMy1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPmFkYXB0b3JzPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisJPG5hbWU+Qmx1ZXByaW50cyBQcm9jZXNzb3IgQWRhcHRvcnMgUE9NPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBBZGFwdG9yczwvZGVzY3JpcHRpb24+CisJPG1vZHVsZXM+CisKKwk8L21vZHVsZXM+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9jb21tb25zL2NvcmUvcG9tLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9jb21tb25zL2NvcmUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjAxNTYwCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2NvbW1vbnMvY29yZS9wb20ueG1sCkBAIC0wLDAgKzEsNDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIH4gIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuCisgIH4KKyAgfiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5jb21tb25zPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjAuMy1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPmNvcmU8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KKwk8bmFtZT5CbHVlcHJpbnRzIFByb2Nlc3NvciBDb3JlPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBDb3JlPC9kZXNjcmlwdGlvbj4KKworCTxkZXBlbmRlbmNpZXM+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+ZGItbGliPC9hcnRpZmFjdElkPgorCQk8L2RlcGVuZGVuY3k+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+cmVzdC1saWI8L2FydGlmYWN0SWQ+CisJCTwvZGVwZW5kZW5jeT4KKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+Y29udHJvbGxlcmJsdWVwcmludHMtcmVzb3VyY2UtZGljdDwvYXJ0aWZhY3RJZD4KKwkJPC9kZXBlbmRlbmN5PgorCTwvZGVwZW5kZW5jaWVzPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2NvbW1vbnMvY29yZS9zcmMvbWFpbi9rb3RsaW4vb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2NvcmUvYXBpL2RhdGEvQmx1ZXByaW50UHJvY2Vzc29yRGF0YS5rdCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9jb21tb25zL2NvcmUvc3JjL21haW4va290bGluL29yZy9vbmFwL2Njc2RrL2FwcHMvYmx1ZXByaW50c3Byb2Nlc3Nvci9jb3JlL2FwaS9kYXRhL0JsdWVwcmludFByb2Nlc3NvckRhdGEua3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzNmNkMgotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9jb21tb25zL2NvcmUvc3JjL21haW4va290bGluL29yZy9vbmFwL2Njc2RrL2FwcHMvYmx1ZXByaW50c3Byb2Nlc3Nvci9jb3JlL2FwaS9kYXRhL0JsdWVwcmludFByb2Nlc3NvckRhdGEua3QKQEAgLTAsMCArMSwxMzEgQEAKKy8qDQorICogIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQorICoNCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3IuY29yZS5hcGkuZGF0YQ0KKw0KK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uRm9ybWF0DQoraW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5ub2RlLk9iamVjdE5vZGUNCitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlNb2RlbFByb3BlcnR5DQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuY29udHJvbGxlcmJsdWVwcmludHMucmVzb3VyY2UuZGljdC5SZXNvdXJjZUFzc2lnbm1lbnQNCisNCisvKg0KKyAqICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqDQorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KKy8qKg0KKyAqIEJsdWVwcmludFByb2Nlc3NvckRhdGENCisgKiBAYXV0aG9yIEJyaW5kYSBTYW50aA0KKyAqIERBVEUgOiA4LzE1LzIwMTgNCisgKi8NCisNCitvcGVuIGNsYXNzIFJlc291cmNlUmVzb2x1dGlvbklucHV0IHsNCisgICAgQGdldDpBcGlNb2RlbFByb3BlcnR5KHJlcXVpcmVkPXRydWUpDQorICAgIGxhdGVpbml0IHZhciBjb21tb25IZWFkZXI6IENvbW1vbkhlYWRlcg0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIGFjdGlvbklkZW50aWZpZXJzOiBBY3Rpb25JZGVudGlmaWVycw0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIHJlc291cmNlQXNzaWdubWVudHM6IExpc3Q8UmVzb3VyY2VBc3NpZ25tZW50Pg0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSApDQorICAgIGxhdGVpbml0IHZhciBwYXlsb2FkOiBPYmplY3ROb2RlDQorfQ0KKw0KK29wZW4gY2xhc3MgUmVzb3VyY2VSZXNvbHV0aW9uT3V0cHV0IHsNCisgICAgQGdldDpBcGlNb2RlbFByb3BlcnR5KHJlcXVpcmVkPXRydWUpDQorICAgIGxhdGVpbml0IHZhciBjb21tb25IZWFkZXI6IENvbW1vbkhlYWRlcg0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIGFjdGlvbklkZW50aWZpZXJzOiBBY3Rpb25JZGVudGlmaWVycw0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIHN0YXR1czogU3RhdHVzDQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eShyZXF1aXJlZD10cnVlKQ0KKyAgICBsYXRlaW5pdCB2YXIgcmVzb3VyY2VBc3NpZ25tZW50czogTGlzdDxSZXNvdXJjZUFzc2lnbm1lbnQ+DQorfQ0KKw0KK29wZW4gY2xhc3MgRXhlY3V0aW9uU2VydmljZUlucHV0IHsNCisgICAgQGdldDpBcGlNb2RlbFByb3BlcnR5KHJlcXVpcmVkPXRydWUpDQorICAgIGxhdGVpbml0IHZhciBjb21tb25IZWFkZXI6IENvbW1vbkhlYWRlcg0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIGFjdGlvbklkZW50aWZpZXJzOiBBY3Rpb25JZGVudGlmaWVycw0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIHBheWxvYWQ6IE9iamVjdE5vZGUNCit9DQorDQorb3BlbiBjbGFzcyBFeGVjdXRpb25TZXJ2aWNlT3V0cHV0IHsNCisgICAgQGdldDpBcGlNb2RlbFByb3BlcnR5KHJlcXVpcmVkPXRydWUpDQorICAgIGxhdGVpbml0IHZhciBjb21tb25IZWFkZXI6IENvbW1vbkhlYWRlcg0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIGFjdGlvbklkZW50aWZpZXJzOiBBY3Rpb25JZGVudGlmaWVycw0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIHN0YXR1czogU3RhdHVzDQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eShyZXF1aXJlZD10cnVlKQ0KKyAgICBsYXRlaW5pdCB2YXIgcGF5bG9hZDogT2JqZWN0Tm9kZQ0KK30NCisNCitvcGVuIGNsYXNzIEFjdGlvbklkZW50aWZpZXJzIHsNCisgICAgQGdldDpBcGlNb2RlbFByb3BlcnR5KHJlcXVpcmVkPWZhbHNlKQ0KKyAgICBsYXRlaW5pdCB2YXIgYmx1ZXByaW50TmFtZTogU3RyaW5nDQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eShyZXF1aXJlZD1mYWxzZSkNCisgICAgbGF0ZWluaXQgdmFyIGJsdWVwcmludFZlcnNpb246IFN0cmluZw0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIGFjdGlvbk5hbWU6IFN0cmluZw0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSwgYWxsb3dhYmxlVmFsdWVzID0gInN5bmMsIGFzeW5jIikNCisgICAgbGF0ZWluaXQgdmFyIG1vZGU6IFN0cmluZw0KK30NCisNCitvcGVuIGNsYXNzIENvbW1vbkhlYWRlciB7DQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eShyZXF1aXJlZD10cnVlLCBleGFtcGxlID0gIjIwMTItMDQtMjNUMTg6MjU6NDMuNTExWiIpDQorICAgIEBnZXQ6SnNvbkZvcm1hdChzaGFwZSA9IEpzb25Gb3JtYXQuU2hhcGUuU1RSSU5HLCAgcGF0dGVybiA9ICJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTJ1onIikNCisgICAgbGF0ZWluaXQgdmFyIHRpbWVzdGFtcDogU3RyaW5nDQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eShyZXF1aXJlZD10cnVlKQ0KKyAgICBsYXRlaW5pdCB2YXIgb3JpZ2luYXRvcklkOiBTdHJpbmcNCisgICAgQGdldDpBcGlNb2RlbFByb3BlcnR5KHJlcXVpcmVkPXRydWUpDQorICAgIGxhdGVpbml0IHZhciByZXF1ZXN0SWQ6IFN0cmluZw0KKyAgICBAZ2V0OkFwaU1vZGVsUHJvcGVydHkocmVxdWlyZWQ9dHJ1ZSkNCisgICAgbGF0ZWluaXQgdmFyIHN1YlJlcXVlc3RJZDogU3RyaW5nDQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eShyZXF1aXJlZD1mYWxzZSkNCisgICAgdmFyIGZsYWdzOiBGbGFncz8gPSBudWxsDQorfQ0KKw0KK29wZW4gY2xhc3MgRmxhZ3Mgew0KKyAgICB2YXIgaXNGb3JjZTogQm9vbGVhbiA9IGZhbHNlDQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eSh2YWx1ZSA9ICIzNjAwIikNCisgICAgdmFyIHR0bDogSW50ID0gMzYwMA0KK30NCisNCitvcGVuIGNsYXNzIFN0YXR1cyB7DQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eShyZXF1aXJlZD10cnVlKQ0KKyAgICB2YXIgY29kZTogSW50ID0gMjAwDQorICAgIEBnZXQ6QXBpTW9kZWxQcm9wZXJ0eShyZXF1aXJlZD1mYWxzZSkNCisgICAgdmFyIGVycm9yTWVzc2FnZTogU3RyaW5nPyA9IG51bGwNCisgICAgQGdldDpBcGlNb2RlbFByb3BlcnR5KHJlcXVpcmVkPXRydWUpDQorICAgIGxhdGVpbml0IHZhciBtZXNzYWdlOiBTdHJpbmcNCit9DQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2NvbW1vbnMvY29yZS9zcmMvbWFpbi9rb3RsaW4vb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2NvcmUvYXBpL2RhdGEvQmx1ZXByaW50UHJvY2Vzc29yRXhjZXB0aW9uLmt0IGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2NvbW1vbnMvY29yZS9zcmMvbWFpbi9rb3RsaW4vb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL2NvcmUvYXBpL2RhdGEvQmx1ZXByaW50UHJvY2Vzc29yRXhjZXB0aW9uLmt0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNGQ2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9jb3JlL3NyYy9tYWluL2tvdGxpbi9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3IvY29yZS9hcGkvZGF0YS9CbHVlcHJpbnRQcm9jZXNzb3JFeGNlcHRpb24ua3QKQEAgLTAsMCArMSw0OCBAQAorLyoNCisgKiAgQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4NCisgKg0KKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisgKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCisNCitwYWNrYWdlIG9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3Nvci5jb3JlLmFwaS5kYXRhDQorDQorLyoqDQorICogQmx1ZXByaW50UHJvY2Vzc29yRXhjZXB0aW9uDQorICogQGF1dGhvciBCcmluZGEgU2FudGgNCisgKiBEQVRFIDogOC8xNS8yMDE4DQorICovDQorb3BlbiBjbGFzcyBCbHVlcHJpbnRQcm9jZXNzb3JFeGNlcHRpb24gOiBFeGNlcHRpb24gew0KKyAgICB2YXIgY29kZTogSW50ID0gMTAwDQorDQorICAgIGNvbnN0cnVjdG9yKGNhdXNlOiBUaHJvd2FibGUpIDogc3VwZXIoY2F1c2UpDQorICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IFN0cmluZykgOiBzdXBlcihtZXNzYWdlKQ0KKyAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBTdHJpbmcsIGNhdXNlOiBUaHJvd2FibGUpIDogc3VwZXIobWVzc2FnZSwgY2F1c2UpDQorICAgIGNvbnN0cnVjdG9yKGNhdXNlOiBUaHJvd2FibGUsIG1lc3NhZ2U6IFN0cmluZywgdmFyYXJnIGFyZ3M6IEFueT8pIDogc3VwZXIoU3RyaW5nLmZvcm1hdChtZXNzYWdlLCAqYXJncyksIGNhdXNlKQ0KKw0KKyAgICBjb25zdHJ1Y3Rvcihjb2RlOiBJbnQsIGNhdXNlOiBUaHJvd2FibGUpIDogc3VwZXIoY2F1c2UpIHsNCisgICAgICAgIHRoaXMuY29kZSA9IGNvZGUNCisgICAgfQ0KKw0KKyAgICBjb25zdHJ1Y3Rvcihjb2RlOiBJbnQsIG1lc3NhZ2U6IFN0cmluZykgOiBzdXBlcihtZXNzYWdlKSB7DQorICAgICAgICB0aGlzLmNvZGUgPSBjb2RlDQorICAgIH0NCisNCisgICAgY29uc3RydWN0b3IoY29kZTogSW50LCBtZXNzYWdlOiBTdHJpbmcsIGNhdXNlOiBUaHJvd2FibGUpIDogc3VwZXIobWVzc2FnZSwgY2F1c2UpIHsNCisgICAgICAgIHRoaXMuY29kZSA9IGNvZGUNCisgICAgfQ0KKw0KKyAgICBjb25zdHJ1Y3Rvcihjb2RlOiBJbnQsIGNhdXNlOiBUaHJvd2FibGUsIG1lc3NhZ2U6IFN0cmluZywgdmFyYXJnIGFyZ3M6IEFueT8pDQorICAgICAgICAgICAgOiBzdXBlcihTdHJpbmcuZm9ybWF0KG1lc3NhZ2UsICphcmdzKSwgY2F1c2UpIHsNCisgICAgICAgIHRoaXMuY29kZSA9IGNvZGUNCisgICAgfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9jb3JlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2NvbW1vbnMvY29yZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2U4NzE0Ci0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2NvbW1vbnMvY29yZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjDQorIyAgQ29weXJpZ2h0IKkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyMNCisjICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisjICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorIyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIw0KKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjDQorIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMNCisNCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9kYi1saWIvcG9tLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9jb21tb25zL2RiLWxpYi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYWJiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9kYi1saWIvcG9tLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICB+ICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LgorICB+CisgIH4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+ICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+Y29tbW9uczwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4wLjMtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5kYi1saWI8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KKwk8bmFtZT5CbHVlcHJpbnRzIFByb2Nlc3NvciBEQiBMaWI8L25hbWU+CisJPGRlc2NyaXB0aW9uPkJsdWVwcmludHMgUHJvY2Vzc29yIERCIExpYjwvZGVzY3JpcHRpb24+CisKKwk8ZGVwZW5kZW5jaWVzPgorCisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci1kYXRhLWpwYTwvYXJ0aWZhY3RJZD4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPmphdmF4LnZhbGlkYXRpb248L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD52YWxpZGF0aW9uLWFwaTwvYXJ0aWZhY3RJZD4KKwkJPC9kZXBlbmRlbmN5PgorCisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+Y29tLmgyZGF0YWJhc2U8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5oMjwvYXJ0aWZhY3RJZD4KKwkJPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5oaWJlcm5hdGU8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5oaWJlcm5hdGUtdGVzdGluZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisJPC9kZXBlbmRlbmNpZXM+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9jb21tb25zL3BvbS54bWwgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYTNjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9wb20ueG1sCkBAIC0wLDAgKzEsNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIH4gIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuCisgIH4KKyAgfiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1vZHVsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjAuMC4zLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+Y29tbW9uczwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkJsdWVwcmludHMgUHJvY2Vzc29yIENvbW1vbnMgUE9NPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBDb21tb25zPC9kZXNjcmlwdGlvbj4KKworICAgIDxtb2R1bGVzPgorICAgICAgICA8bW9kdWxlPmRiLWxpYjwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPnJlc3QtbGliPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+YWRhcHRvcnM8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jb3JlPC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLm1vZHVsZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmphY2tzb24tbW9kdWxlLWtvdGxpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5qZXRicmFpbnMua290bGluPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+a290bGluLXN0ZGxpYi1qZGs4PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpldGJyYWlucy5rb3RsaW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rb3RsaW4tcmVmbGVjdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5qZXRicmFpbnMua290bGluPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+a290bGluLXRlc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5pby5wcm9qZWN0cmVhY3RvcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnJlYWN0b3ItdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvY29tbW9ucy9yZXN0LWxpYi9wb20ueG1sIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2NvbW1vbnMvcmVzdC1saWIvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjcxZjEyCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2NvbW1vbnMvcmVzdC1saWIvcG9tLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICB+ICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LgorICB+CisgIH4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+ICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+Y29tbW9uczwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4wLjMtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5yZXN0LWxpYjwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgorCTxuYW1lPkJsdWVwcmludHMgUHJvY2Vzc29yIFJlc3QgTGliPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBSZXN0IExpYjwvZGVzY3JpcHRpb24+CisJPGRlcGVuZGVuY2llcz4KKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Q8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLXdlYmZsdXg8L2FydGlmYWN0SWQ+CisJCTwvZGVwZW5kZW5jeT4KKwk8L2RlcGVuZGVuY2llcz4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2luYm91bmRzL3BvbS54bWwgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvaW5ib3VuZHMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjlkMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2luYm91bmRzL3BvbS54bWwKQEAgLTAsMCArMSw1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgfiAgQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4KKyAgfgorICB+ICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgfiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+ICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICB+ICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+ICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgfiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICB+ICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bW9kdWxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MC4wLjMtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5pbmJvdW5kczwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkJsdWVwcmludHMgUHJvY2Vzc29yIEluYm91bmRzIFBPTTwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+Qmx1ZXByaW50cyBQcm9jZXNzb3IgSW5ib3VuZHM8L2Rlc2NyaXB0aW9uPgorCisgICAgPG1vZHVsZXM+CisgICAgICAgIDxtb2R1bGU+cmVzb3VyY2UtYXBpPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+c2VsZnNlcnZpY2UtYXBpPC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorICAgIDxkZXBlbmRlbmNpZXM+CisKKworCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlY3V0aW9uLXNlcnZpY2U8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5yZXNvbHV0aW9uLXNlcnZpY2U8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Q8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLWFjdHVhdG9yPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvaW5ib3VuZHMvcmVzb3VyY2UtYXBpL3BvbS54bWwgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvaW5ib3VuZHMvcmVzb3VyY2UtYXBpL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkN2M5ZAotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9pbmJvdW5kcy9yZXNvdXJjZS1hcGkvcG9tLnhtbApAQCAtMCwwICsxLDMxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICB+ICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LgorICB+CisgIH4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+ICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+aW5ib3VuZHM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMC4zLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCisJPGFydGlmYWN0SWQ+cmVzb3VyY2UtYXBpPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CisJPG5hbWU+Qmx1ZXByaW50cyBQcm9jZXNzb3IgUmVzb3VyY2UgQVBJPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBSZXNvdXJjZSBBUEk8L2Rlc2NyaXB0aW9uPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvaW5ib3VuZHMvcmVzb3VyY2UtYXBpL3NyYy9tYWluL2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3Jlc291cmNlL2FwaS9SZXNvdXJjZVJlc29sdXRpb25Db250cm9sbGVyLmphdmEgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvaW5ib3VuZHMvcmVzb3VyY2UtYXBpL3NyYy9tYWluL2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3Jlc291cmNlL2FwaS9SZXNvdXJjZVJlc29sdXRpb25Db250cm9sbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlYjQxNQotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9pbmJvdW5kcy9yZXNvdXJjZS1hcGkvc3JjL21haW4vamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3IvcmVzb3VyY2UvYXBpL1Jlc291cmNlUmVzb2x1dGlvbkNvbnRyb2xsZXIuamF2YQpAQCAtMCwwICsxLDU2IEBACisvKg0KKyAqICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqDQorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yLnJlc291cmNlLmFwaTsNCisNCitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3Nvci5jb3JlLmFwaS5kYXRhLlJlc291cmNlUmVzb2x1dGlvbklucHV0Ow0KK2ltcG9ydCBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3IuY29yZS5hcGkuZGF0YS5SZXNvdXJjZVJlc29sdXRpb25PdXRwdXQ7DQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3Nvci5zZXJ2aWNlcy5yZXNvbHV0aW9uLlJlc291cmNlUmVzb2x1dGlvblNlcnZpY2U7DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5NZWRpYVR5cGU7DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOw0KK2ltcG9ydCByZWFjdG9yLmNvcmUucHVibGlzaGVyLk1vbm87DQorDQorLyoqDQorICogUmVzb3VyY2VSZXNvbHV0aW9uQ29udHJvbGxlcg0KKyAqDQorICogQGF1dGhvciBCcmluZGEgU2FudGggRGF0ZSA6IDgvMTMvMjAxOA0KKyAqLw0KKw0KK0BSZXN0Q29udHJvbGxlcg0KK0BSZXF1ZXN0TWFwcGluZygiL2FwaS92MS9yZXNvdXJjZSIpDQorcHVibGljIGNsYXNzIFJlc291cmNlUmVzb2x1dGlvbkNvbnRyb2xsZXIgew0KKw0KKyAgICBwcml2YXRlIFJlc291cmNlUmVzb2x1dGlvblNlcnZpY2UgcmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZTsNCisNCisgICAgcHVibGljIFJlc291cmNlUmVzb2x1dGlvbkNvbnRyb2xsZXIoUmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZSByZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLnJlc291cmNlUmVzb2x1dGlvblNlcnZpY2UgPSByZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZXF1ZXN0TWFwcGluZyhwYXRoID0gIi9waW5nIiwgbWV0aG9kID0gUmVxdWVzdE1ldGhvZC5HRVQsIHByb2R1Y2VzID0gTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT05fVkFMVUUpDQorICAgIHB1YmxpYyBAUmVzcG9uc2VCb2R5DQorICAgIE1vbm88U3RyaW5nPiBwaW5nKCkgew0KKyAgICAgICAgcmV0dXJuIE1vbm8uanVzdCgiU3VjY2VzcyIpOw0KKyAgICB9DQorDQorICAgIEBSZXF1ZXN0TWFwcGluZyhwYXRoID0gIi9yZXNvbHZlLW1hcHBpbmciLCBtZXRob2QgPSBSZXF1ZXN0TWV0aG9kLlBPU1QsIHByb2R1Y2VzID0gTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT05fVkFMVUUpDQorICAgIEBBcGlPcGVyYXRpb24odmFsdWUgPSAiUmVzb2x2ZSBSZXNvdXJjZSBNYXBwaW5ncyIsDQorICAgICAgICAgICAgbm90ZXMgPSAiQWxzbyByZXR1cm5zIGEgbGluayB0byByZXRyaWV2ZSBhbGwgc3R1ZGVudHMgd2l0aCByZWwgLSBhbGwtc3R1ZGVudHMiKQ0KKyAgICBwdWJsaWMgQFJlc3BvbnNlQm9keQ0KKyAgICBNb25vPFJlc291cmNlUmVzb2x1dGlvbk91dHB1dD4gcmVzb2x2ZVJlc291cmNlKEBSZXF1ZXN0Qm9keSBSZXNvdXJjZVJlc29sdXRpb25JbnB1dCByZXNvdXJjZVJlc29sdXRpb25JbnB1dCkgew0KKyAgICAgICAgcmV0dXJuIE1vbm8uanVzdChyZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlLnJlc29sdmVSZXNvdXJjZShyZXNvdXJjZVJlc29sdXRpb25JbnB1dCkpOw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9pbmJvdW5kcy9zZWxmc2VydmljZS1hcGkvcG9tLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9pbmJvdW5kcy9zZWxmc2VydmljZS1hcGkvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzc3YzA4Ci0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL2luYm91bmRzL3NlbGZzZXJ2aWNlLWFwaS9wb20ueG1sCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIH4gIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuCisgIH4KKyAgfiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5pbmJvdW5kczwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4wLjMtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5zZWxmc2VydmljZS1hcGk8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KKwk8bmFtZT5CbHVlcHJpbnRzIFByb2Nlc3NvciBTZWxmc2VydmljZSBBUEk8L25hbWU+CisJPGRlc2NyaXB0aW9uPkJsdWVwcmludHMgUHJvY2Vzc29yIFNlbGZzZXJ2aWNlIEFQSTwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9pbmJvdW5kcy9zZWxmc2VydmljZS1hcGkvc3JjL21haW4vamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3Ivc2VsZnNlcnZpY2UvYXBpL0V4ZWN1dGlvblNlcnZpY2VDb250cm9sbGVyLmphdmEgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvaW5ib3VuZHMvc2VsZnNlcnZpY2UtYXBpL3NyYy9tYWluL2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3NlbGZzZXJ2aWNlL2FwaS9FeGVjdXRpb25TZXJ2aWNlQ29udHJvbGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NDA3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvaW5ib3VuZHMvc2VsZnNlcnZpY2UtYXBpL3NyYy9tYWluL2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3NlbGZzZXJ2aWNlL2FwaS9FeGVjdXRpb25TZXJ2aWNlQ29udHJvbGxlci5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8qDQorICogIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQorICoNCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3Iuc2VsZnNlcnZpY2UuYXBpOw0KKw0KK2ltcG9ydCBpby5zd2FnZ2VyLmFubm90YXRpb25zLkFwaU9wZXJhdGlvbjsNCitpbXBvcnQgb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yLmNvcmUuYXBpLmRhdGEuRXhlY3V0aW9uU2VydmljZUlucHV0Ow0KK2ltcG9ydCBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3IuY29yZS5hcGkuZGF0YS5FeGVjdXRpb25TZXJ2aWNlT3V0cHV0Ow0KK2ltcG9ydCBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3Iuc2VydmljZXMuZXhlY3V0aW9uLkV4ZWN1dGlvblNlcnZpY2U7DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5NZWRpYVR5cGU7DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOw0KK2ltcG9ydCByZWFjdG9yLmNvcmUucHVibGlzaGVyLk1vbm87DQorDQorLyoqDQorICogRXhlY3V0aW9uU2VydmljZUNvbnRyb2xsZXINCisgKg0KKyAqIEBhdXRob3IgQnJpbmRhIFNhbnRoIDgvMTQvMjAxOA0KKyAqLw0KK0BSZXN0Q29udHJvbGxlcg0KK0BSZXF1ZXN0TWFwcGluZygiL2FwaS92MS9leGVjdXRpb24tc2VydmljZSIpDQorcHVibGljIGNsYXNzIEV4ZWN1dGlvblNlcnZpY2VDb250cm9sbGVyIHsNCisNCisgICAgcHJpdmF0ZSBFeGVjdXRpb25TZXJ2aWNlIGV4ZWN1dGlvblNlcnZpY2U7DQorDQorICAgIHB1YmxpYyBFeGVjdXRpb25TZXJ2aWNlQ29udHJvbGxlcihFeGVjdXRpb25TZXJ2aWNlIGV4ZWN1dGlvblNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuZXhlY3V0aW9uU2VydmljZSA9IGV4ZWN1dGlvblNlcnZpY2U7DQorICAgIH0NCisNCisgICAgQFJlcXVlc3RNYXBwaW5nKHBhdGggPSAiL3BpbmciLCBtZXRob2QgPSBSZXF1ZXN0TWV0aG9kLkdFVCwgcHJvZHVjZXMgPSBNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTl9WQUxVRSkNCisgICAgcHVibGljIEBSZXNwb25zZUJvZHkNCisgICAgTW9ubzxTdHJpbmc+IHBpbmcoKSB7DQorICAgICAgICByZXR1cm4gTW9uby5qdXN0KCJTdWNjZXNzIik7DQorICAgIH0NCisNCisgICAgQFJlcXVlc3RNYXBwaW5nKHBhdGggPSAiL3Byb2Nlc3MiLCBtZXRob2QgPSBSZXF1ZXN0TWV0aG9kLlBPU1QsIHByb2R1Y2VzID0gTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT05fVkFMVUUpDQorICAgIEBBcGlPcGVyYXRpb24odmFsdWUgPSAiUmVzb2x2ZSBSZXNvdXJjZSBNYXBwaW5ncyIsDQorICAgICAgICAgICAgbm90ZXMgPSAiVGFrZXMgdGhlIGJsdWVwcmludCBpbmZvcm1hdGlvbiBhbmQgcHJvY2VzcyBhcyBwZXIgdGhlIHBheWxvYWQiKQ0KKyAgICBwdWJsaWMgQFJlc3BvbnNlQm9keQ0KKyAgICBNb25vPEV4ZWN1dGlvblNlcnZpY2VPdXRwdXQ+IHByb2Nlc3MoQFJlcXVlc3RCb2R5IEV4ZWN1dGlvblNlcnZpY2VJbnB1dCBleGVjdXRpb25TZXJ2aWNlSW5wdXQpIHsNCisgICAgICAgIHJldHVybiBNb25vLmp1c3QoZXhlY3V0aW9uU2VydmljZS5wcm9jZXNzKGV4ZWN1dGlvblNlcnZpY2VJbnB1dCkpOw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9vdXRib3VuZHMvcG9tLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9vdXRib3VuZHMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTNlNTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL291dGJvdW5kcy9wb20ueG1sCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIH4gIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuCisgIH4KKyAgfiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5tb2R1bGVzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjAuMy1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm91dGJvdW5kczwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorCTxuYW1lPkJsdWVwcmludHMgUHJvY2Vzc29yIE91dGJvdW5kcyBQT008L25hbWU+CisJPGRlc2NyaXB0aW9uPkJsdWVwcmludHMgUHJvY2Vzc29yIE91dGJvdW5kczwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9wb20ueG1sIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0NDc0MwotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9wb20ueG1sCkBAIC0wLDAgKzEsODcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIH4gIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuCisgIH4KKyAgfiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5wYXJlbnQ8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMC4zLVNOQVBTSE9UPC92ZXJzaW9uPgorCQk8cmVsYXRpdmVQYXRoPi4uL3BhcmVudDwvcmVsYXRpdmVQYXRoPgorCTwvcGFyZW50PgorCisJPGFydGlmYWN0SWQ+bW9kdWxlczwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorCTxuYW1lPkJsdWVwcmludHMgUHJvY2Vzc29yIE1vZHVsZXMgUE9NPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBNb2R1bGVzPC9kZXNjcmlwdGlvbj4KKworCTxtb2R1bGVzPgorCQk8bW9kdWxlPmNvbW1vbnM8L21vZHVsZT4KKwkJPG1vZHVsZT5vdXRib3VuZHM8L21vZHVsZT4KKwkJPG1vZHVsZT5zZXJ2aWNlczwvbW9kdWxlPgorCQk8bW9kdWxlPmluYm91bmRzPC9tb2R1bGU+CisJPC9tb2R1bGVzPgorCisgICAgPHByb3BlcnRpZXM+CisgICAgICAgIDxrb3RsaW4udmVyc2lvbj4xLjIuNjA8L2tvdGxpbi52ZXJzaW9uPgorICAgIDwvcHJvcGVydGllcz4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpldGJyYWlucy5rb3RsaW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rb3RsaW4tc3RkbGliLWpkazg8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke2tvdGxpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5qZXRicmFpbnMua290bGluPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+a290bGluLXRlc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke2tvdGxpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpldGJyYWlucy5rb3RsaW48L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+a290bGluLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2tvdGxpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5jb21waWxlPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5jb21waWxlPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jb21waWxlPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+dGVzdC1jb21waWxlPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0LWNvbXBpbGU8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnRlc3QtY29tcGlsZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGp2bVRhcmdldD4xLjg8L2p2bVRhcmdldD4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL2RiLXNlcnZpY2UvcG9tLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9kYi1zZXJ2aWNlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExYmE2ZAotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9kYi1zZXJ2aWNlL3BvbS54bWwKQEAgLTAsMCArMSwzMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgfiAgQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4KKyAgfgorICB+ICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgfiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+ICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICB+ICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+ICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgfiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICB+ICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwk8cGFyZW50PgorCQk8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPnNlcnZpY2VzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjAuMy1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPmRiLXNlcnZpY2U8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KKwk8bmFtZT5CbHVlcHJpbnRzIFByb2Nlc3NvciBEQiBTZXJ2aWNlPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBEQiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKworCTxkZXBlbmRlbmNpZXM+CisJPC9kZXBlbmRlbmNpZXM+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvZXhlY3V0aW9uLXNlcnZpY2UvcG9tLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9leGVjdXRpb24tc2VydmljZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTQ3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvZXhlY3V0aW9uLXNlcnZpY2UvcG9tLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICB+ICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LgorICB+CisgIH4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+ICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MC4wLjMtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5leGVjdXRpb24tc2VydmljZTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgorICAgIDxuYW1lPkJsdWVwcmludHMgUHJvY2Vzc29yIEV4ZWN1dGlvbiBTZXJ2aWNlPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBFeGVjdXRpb24gU2VydmljZTwvZGVzY3JpcHRpb24+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmRiLXNlcnZpY2U8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9leGVjdXRpb24tc2VydmljZS9zcmMvbWFpbi9rb3RsaW4vb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3NlcnZpY2VzL2V4ZWN1dGlvbi9FeGVjdXRpb25TZXJ2aWNlLmt0IGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL2V4ZWN1dGlvbi1zZXJ2aWNlL3NyYy9tYWluL2tvdGxpbi9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3Ivc2VydmljZXMvZXhlY3V0aW9uL0V4ZWN1dGlvblNlcnZpY2Uua3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViMjZiYgotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9leGVjdXRpb24tc2VydmljZS9zcmMvbWFpbi9rb3RsaW4vb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3NlcnZpY2VzL2V4ZWN1dGlvbi9FeGVjdXRpb25TZXJ2aWNlLmt0CkBAIC0wLDAgKzEsNDYgQEAKKy8qDQorICogIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQorICoNCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorcGFja2FnZSBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3Iuc2VydmljZXMuZXhlY3V0aW9uDQorDQorDQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3Nvci5jb3JlLmFwaS5kYXRhLkV4ZWN1dGlvblNlcnZpY2VJbnB1dA0KK2ltcG9ydCBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3IuY29yZS5hcGkuZGF0YS5FeGVjdXRpb25TZXJ2aWNlT3V0cHV0DQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3Nvci5jb3JlLmFwaS5kYXRhLlN0YXR1cw0KK2ltcG9ydCBvcmcub25hcC5jY3Nkay5hcHBzLmNvbnRyb2xsZXJibHVlcHJpbnRzLmNvcmUudXRpbHMuSmFja3NvblV0aWxzDQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlDQoraW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5ub2RlLk9iamVjdE5vZGUNCisNCisvKioNCisgKiBFeGVjdXRpb25TZXJ2aWNlDQorICogQGF1dGhvciBCcmluZGEgU2FudGgNCisgKiA4LzE0LzIwMTgNCisgKi8NCitAU2VydmljZQ0KK2NsYXNzIEV4ZWN1dGlvblNlcnZpY2Ugew0KKw0KKyAgICBmdW4gcHJvY2VzcyhleGVjdXRpb25TZXJ2aWNlSW5wdXQ6IEV4ZWN1dGlvblNlcnZpY2VJbnB1dCk6IEV4ZWN1dGlvblNlcnZpY2VPdXRwdXQgew0KKyAgICAgICAgdmFsIGV4ZWN1dGlvblNlcnZpY2VPdXRwdXQgPSBFeGVjdXRpb25TZXJ2aWNlT3V0cHV0KCkNCisgICAgICAgIGV4ZWN1dGlvblNlcnZpY2VPdXRwdXQuYWN0aW9uSWRlbnRpZmllcnMgPSBleGVjdXRpb25TZXJ2aWNlSW5wdXQuYWN0aW9uSWRlbnRpZmllcnMNCisgICAgICAgIGV4ZWN1dGlvblNlcnZpY2VPdXRwdXQuY29tbW9uSGVhZGVyID0gZXhlY3V0aW9uU2VydmljZUlucHV0LmNvbW1vbkhlYWRlcg0KKyAgICAgICAgZXhlY3V0aW9uU2VydmljZU91dHB1dC5wYXlsb2FkID0gSmFja3NvblV0aWxzLmpzb25Ob2RlKCJ7fSIpIGFzIE9iamVjdE5vZGUNCisgICAgICAgIHZhbCBzdGF0dXMgPSBTdGF0dXMoKQ0KKyAgICAgICAgc3RhdHVzLmNvZGUgPSAyMDANCisgICAgICAgIHN0YXR1cy5tZXNzYWdlID0gIlN1Y2Nlc3MiDQorICAgICAgICBleGVjdXRpb25TZXJ2aWNlT3V0cHV0LnN0YXR1cyA9IHN0YXR1cw0KKyAgICAgICAgcmV0dXJuIGV4ZWN1dGlvblNlcnZpY2VPdXRwdXQNCisgICAgfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvZXhlY3V0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3Ivc2VydmljZXMvZXhlY3V0aW9uL0V4ZWN1dGlvblNlcnZpY2VUZXN0LmphdmEgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvZXhlY3V0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3Ivc2VydmljZXMvZXhlY3V0aW9uL0V4ZWN1dGlvblNlcnZpY2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmOTVkMgotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9leGVjdXRpb24tc2VydmljZS9zcmMvdGVzdC9qYXZhL29yZy9vbmFwL2Njc2RrL2FwcHMvYmx1ZXByaW50c3Byb2Nlc3Nvci9zZXJ2aWNlcy9leGVjdXRpb24vRXhlY3V0aW9uU2VydmljZVRlc3QuamF2YQpAQCAtMCwwICsxLDcwIEBACisvKg0KKyAqICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqDQorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yLnNlcnZpY2VzLmV4ZWN1dGlvbjsNCisNCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLm5vZGUuT2JqZWN0Tm9kZTsNCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsczsNCitpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQoraW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsNCitpbXBvcnQgb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yLmNvcmUuYXBpLmRhdGEuRXhlY3V0aW9uU2VydmljZUlucHV0Ow0KK2ltcG9ydCBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3IuY29yZS5hcGkuZGF0YS5FeGVjdXRpb25TZXJ2aWNlT3V0cHV0Ow0KK2ltcG9ydCBvcmcub25hcC5jY3Nkay5hcHBzLmNvbnRyb2xsZXJibHVlcHJpbnRzLmNvcmUudXRpbHMuSmFja3NvblV0aWxzOw0KK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOw0KK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOw0KK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnRlc3QuY29udGV4dC5Db250ZXh0Q29uZmlndXJhdGlvbjsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LmNvbnRleHQuanVuaXQ0LlNwcmluZ1J1bm5lcjsNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7DQorDQorDQorLyoqDQorICogRXhlY3V0aW9uU2VydmljZVRlc3QNCisgKg0KKyAqIEBhdXRob3IgQnJpbmRhIFNhbnRoDQorICogREFURSA6IDgvMTUvMjAxOA0KKyAqLw0KK0BSdW5XaXRoKFNwcmluZ1J1bm5lci5jbGFzcykNCitAQ29udGV4dENvbmZpZ3VyYXRpb24oY2xhc3NlcyA9IEV4ZWN1dGlvblNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIEV4ZWN1dGlvblNlcnZpY2VUZXN0IHsNCisgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEV4ZWN1dGlvblNlcnZpY2VUZXN0LmNsYXNzKTsNCisNCisgICAgQEF1dG93aXJlZA0KKyAgICBwcml2YXRlIEV4ZWN1dGlvblNlcnZpY2UgZXhlY3V0aW9uU2VydmljZTsNCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdEV4ZWN1dGlvblNlcnZpY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisNCisgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIFJlc291cmNlUmVzb2x1dGlvblNlcnZpY2UiLCBleGVjdXRpb25TZXJ2aWNlKTsNCisNCisgICAgICAgIFN0cmluZyByZXNvdXJjZVJlc29sdXRpb25JbnB1dENvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZygNCisgICAgICAgICAgICAgICAgbmV3IEZpbGUoInNyYy90ZXN0L3Jlc291cmNlcy9wYXlsb2FkL3JlcXVlc3RzL3NhbXBsZS1leGVjdXRpb24tcmVxdWVzdC5qc29uIiksIENoYXJzZXQuZGVmYXVsdENoYXJzZXQoKSk7DQorDQorICAgICAgICBFeGVjdXRpb25TZXJ2aWNlSW5wdXQgZXhlY3V0aW9uU2VydmljZUlucHV0ID0gSmFja3NvblV0aWxzLnJlYWRWYWx1ZShyZXNvdXJjZVJlc29sdXRpb25JbnB1dENvbnRlbnQsIEV4ZWN1dGlvblNlcnZpY2VJbnB1dC5jbGFzcyApOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoImZhaWxlZCB0byBwb3B1bGF0ZSBleGVjdXRpb25TZXJ2aWNlSW5wdXQgcmVxdWVzdCAiLGV4ZWN1dGlvblNlcnZpY2VJbnB1dCk7DQorDQorICAgICAgICBPYmplY3ROb2RlIGlucHV0Q29udGVudCA9IChPYmplY3ROb2RlKUphY2tzb25VdGlscy5qc29uTm9kZUZyb21GaWxlKCJzcmMvdGVzdC9yZXNvdXJjZXMvcGF5bG9hZC9pbnB1dHMvaW5wdXQuanNvbiIpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoImZhaWxlZCB0byBwb3B1bGF0ZSBpbnB1dCBwYXlsb2FkICIsaW5wdXRDb250ZW50KTsNCisgICAgICAgIGV4ZWN1dGlvblNlcnZpY2VJbnB1dC5zZXRQYXlsb2FkKGlucHV0Q29udGVudCk7DQorDQorICAgICAgICBFeGVjdXRpb25TZXJ2aWNlT3V0cHV0IGV4ZWN1dGlvblNlcnZpY2VPdXRwdXQgPSBleGVjdXRpb25TZXJ2aWNlLnByb2Nlc3MoZXhlY3V0aW9uU2VydmljZUlucHV0KTsNCisgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gcG9wdWxhdGUgb3V0cHV0IixleGVjdXRpb25TZXJ2aWNlT3V0cHV0KTsNCisNCisgICAgfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvZXhlY3V0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL3BheWxvYWQvaW5wdXRzL2lucHV0Lmpzb24gYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvZXhlY3V0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL3BheWxvYWQvaW5wdXRzL2lucHV0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2ZmFjMQotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9leGVjdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvcGF5bG9hZC9pbnB1dHMvaW5wdXQuanNvbgpAQCAtMCwwICsxLDE4IEBACit7DQorCSJhcGktdmVyIjogIjIuMDAiLA0KKwkib3JpZ2luYXRvci1pZCI6ICJNU08iLA0KKwkicmVxdWVzdC1pZCI6ICIxMjM0NTYiLA0KKwkic2VydmljZS1pbnN0YW5jZS1pZCI6ICJpYmN4MDAwMXZtMDAxIiwNCisJInNlcnZpY2UtdHlwZSI6ICJBVlBOIiwNCisJInZuZi10eXBlIjogInZVU1AgLSB2REJFLUlQWCBIVUIiLA0KKwkidm5mLWlkIjogMTIzNDU2LA0KKwkic2VydmljZS10ZW1wbGF0ZS1uYW1lIjogIlZSUi1iYXNlY29uZmlndXJhdGlvbiIsDQorCSJzZXJ2aWNlLXRlbXBsYXRlLXZlcnNpb24iOiAiMS4wLjAiLA0KKwkiYWN0aW9uLW5hbWUiOiAicmVzb3VyY2UtYXNzaWdubWVudC1hY3Rpb24iLA0KKwkiZ3JvdXAtbmFtZSI6ICJzYW1wbGUgZ3JvdXAgbmFtZSIsDQorCSJidW5kbGUtaWQiOiAic2FtcGxlIGJ1bmRsZSBpZCIsDQorCSJidW5kbGUtbWFjIjogWw0KKwkJIlNhbXBsZSBidW5kbGUgbWFjIiwNCisJCSJTYW1wbGUgYnVuZGxlIG1hYyINCisJXQ0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvZXhlY3V0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL3BheWxvYWQvcmVxdWVzdHMvc2FtcGxlLWV4ZWN1dGlvbi1yZXF1ZXN0Lmpzb24gYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvZXhlY3V0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL3BheWxvYWQvcmVxdWVzdHMvc2FtcGxlLWV4ZWN1dGlvbi1yZXF1ZXN0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4YWM1YQotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9leGVjdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvcGF5bG9hZC9yZXF1ZXN0cy9zYW1wbGUtZXhlY3V0aW9uLXJlcXVlc3QuanNvbgpAQCAtMCwwICsxLDIwIEBACit7DQorICAiYWN0aW9uSWRlbnRpZmllcnMiOiB7DQorICAgICJhY3Rpb25OYW1lIjogInNhbXBsZS1hY3Rpb24iLA0KKyAgICAiYmx1ZXByaW50TmFtZSI6ICJzYW1wbGUtYmx1cnByaW50IiwNCisgICAgImJsdWVwcmludFZlcnNpb24iOiAiMS4wLjAiLA0KKyAgICAibW9kZSI6ICJzeW5jIg0KKyAgfSwNCisgICJjb21tb25IZWFkZXIiOiB7DQorICAgICJmbGFncyI6IHsNCisgICAgICAiZm9yY2UiOiB0cnVlLA0KKyAgICAgICJ0dGwiOiAzNjAwDQorICAgIH0sDQorICAgICJvcmlnaW5hdG9ySWQiOiAic2RuYyIsDQorICAgICJyZXF1ZXN0SWQiOiAiMTIzNDU2LTEwMDAiLA0KKyAgICAic3ViUmVxdWVzdElkIjogInN1Yi0xMjM0NTYtMTAwMCIsDQorICAgICJ0aW1lc3RhbXAiOiAiMjAxMi0wNC0yM1QxODoyNTo0My41MTFaIg0KKyAgfSwNCisgICJwYXlsb2FkIjogew0KKyAgfQ0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcG9tLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYjhkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcG9tLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICB+ICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LgorICB+CisgIH4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+ICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tb2R1bGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4wLjAuMy1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnNlcnZpY2VzPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkJsdWVwcmludHMgUHJvY2Vzc29yIFNlcnZpY2UgUE9NPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorCisgICAgPG1vZHVsZXM+CisgICAgICAgIDxtb2R1bGU+ZGItc2VydmljZTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPnJlc29sdXRpb24tc2VydmljZTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmV4ZWN1dGlvbi1zZXJ2aWNlPC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3BvbS54bWwgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxZGQxNAotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9yZXNvbHV0aW9uLXNlcnZpY2UvcG9tLnhtbApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICB+ICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LgorICB+CisgIH4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+ICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MC4wLjMtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+cmVzb2x1dGlvbi1zZXJ2aWNlPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+Qmx1ZXByaW50cyBQcm9jZXNzb3IgUmVzb2x1dGlvbiBTZXJ2aWNlPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBSZXNvbHV0aW9uIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5kYi1zZXJ2aWNlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy9tYWluL2tvdGxpbi9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3Ivc2VydmljZXMvcmVzb2x1dGlvbi9SZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlLmt0IGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvbWFpbi9rb3RsaW4vb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3NlcnZpY2VzL3Jlc29sdXRpb24vUmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZS5rdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFiNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvbWFpbi9rb3RsaW4vb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3NlcnZpY2VzL3Jlc29sdXRpb24vUmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZS5rdApAQCAtMCwwICsxLDQ2IEBACisvKg0KKyAqICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqDQorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yLnNlcnZpY2VzLnJlc29sdXRpb24NCisNCitpbXBvcnQgb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yLmNvcmUuYXBpLmRhdGEuUmVzb3VyY2VSZXNvbHV0aW9uSW5wdXQNCitpbXBvcnQgb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yLmNvcmUuYXBpLmRhdGEuUmVzb3VyY2VSZXNvbHV0aW9uT3V0cHV0DQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3Nvci5jb3JlLmFwaS5kYXRhLlN0YXR1cw0KK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZQ0KKw0KKy8qKg0KKyAqIFJlc291cmNlUmVzb2x1dGlvblNlcnZpY2UNCisgKiBAYXV0aG9yIEJyaW5kYSBTYW50aA0KKyAqIDgvMTQvMjAxOA0KKyAqLw0KKw0KK0BTZXJ2aWNlDQorY2xhc3MgUmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZSB7DQorDQorICAgIGZ1biByZXNvbHZlUmVzb3VyY2UocmVzb3VyY2VSZXNvbHV0aW9uSW5wdXQ6IFJlc291cmNlUmVzb2x1dGlvbklucHV0KTogUmVzb3VyY2VSZXNvbHV0aW9uT3V0cHV0IHsNCisgICAgICAgIHZhbCByZXNvdXJjZVJlc29sdXRpb25PdXRwdXQgPSBSZXNvdXJjZVJlc29sdXRpb25PdXRwdXQoKQ0KKyAgICAgICAgcmVzb3VyY2VSZXNvbHV0aW9uT3V0cHV0LmFjdGlvbklkZW50aWZpZXJzID0gcmVzb3VyY2VSZXNvbHV0aW9uSW5wdXQuYWN0aW9uSWRlbnRpZmllcnMNCisgICAgICAgIHJlc291cmNlUmVzb2x1dGlvbk91dHB1dC5jb21tb25IZWFkZXIgPSByZXNvdXJjZVJlc29sdXRpb25JbnB1dC5jb21tb25IZWFkZXINCisgICAgICAgIHJlc291cmNlUmVzb2x1dGlvbk91dHB1dC5yZXNvdXJjZUFzc2lnbm1lbnRzID0gcmVzb3VyY2VSZXNvbHV0aW9uSW5wdXQucmVzb3VyY2VBc3NpZ25tZW50cw0KKw0KKyAgICAgICAgdmFsIHN0YXR1cyA9IFN0YXR1cygpDQorICAgICAgICBzdGF0dXMuY29kZSA9IDIwMA0KKyAgICAgICAgc3RhdHVzLm1lc3NhZ2UgPSAiU3VjY2VzcyINCisgICAgICAgIHJlc291cmNlUmVzb2x1dGlvbk91dHB1dC5zdGF0dXMgPSBzdGF0dXMNCisNCisgICAgICAgIHJldHVybiByZXNvdXJjZVJlc29sdXRpb25PdXRwdXQNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy90ZXN0L2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3NlcnZpY2VzL3Jlc29sdXRpb24vUmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZVRlc3QuamF2YSBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9yZXNvbHV0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvb25hcC9jY3Nkay9hcHBzL2JsdWVwcmludHNwcm9jZXNzb3Ivc2VydmljZXMvcmVzb2x1dGlvbi9SZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMzU5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy90ZXN0L2phdmEvb3JnL29uYXAvY2NzZGsvYXBwcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3NlcnZpY2VzL3Jlc29sdXRpb24vUmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZVRlc3QuamF2YQpAQCAtMCwwICsxLDgwIEBACisvKg0KKyAqICBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqDQorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yLnNlcnZpY2VzLnJlc29sdXRpb247DQorDQoraW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5ub2RlLk9iamVjdE5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5Db2xsZWN0aW9uVXRpbHM7DQoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHM7DQoraW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7DQoraW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7DQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3Nvci5jb3JlLmFwaS5kYXRhLlJlc291cmNlUmVzb2x1dGlvbklucHV0Ow0KK2ltcG9ydCBvcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3IuY29yZS5hcGkuZGF0YS5SZXNvdXJjZVJlc29sdXRpb25PdXRwdXQ7DQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuY29udHJvbGxlcmJsdWVwcmludHMuY29yZS51dGlscy5KYWNrc29uVXRpbHM7DQoraW1wb3J0IG9yZy5vbmFwLmNjc2RrLmFwcHMuY29udHJvbGxlcmJsdWVwcmludHMucmVzb3VyY2UuZGljdC5SZXNvdXJjZUFzc2lnbm1lbnQ7DQoraW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7DQoraW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7DQoraW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsudGVzdC5jb250ZXh0LkNvbnRleHRDb25maWd1cmF0aW9uOw0KK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnRlc3QuY29udGV4dC5qdW5pdDQuU3ByaW5nUnVubmVyOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQorLyoqDQorICogUmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZVRlc3QNCisgKg0KKyAqIEBhdXRob3IgQnJpbmRhIFNhbnRoIERBVEUgOiA4LzE1LzIwMTgNCisgKi8NCitAUnVuV2l0aChTcHJpbmdSdW5uZXIuY2xhc3MpDQorQENvbnRleHRDb25maWd1cmF0aW9uKGNsYXNzZXMgPSBSZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlLmNsYXNzKQ0KK3B1YmxpYyBjbGFzcyBSZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlVGVzdCB7DQorICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihSZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlVGVzdC5jbGFzcyk7DQorDQorICAgIEBBdXRvd2lyZWQNCisgICAgcHJpdmF0ZSBSZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlIHJlc291cmNlUmVzb2x1dGlvblNlcnZpY2U7DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RSZXNvbHZlUmVzb3VyY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisNCisgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIFJlc291cmNlUmVzb2x1dGlvblNlcnZpY2UiLCByZXNvdXJjZVJlc29sdXRpb25TZXJ2aWNlKTsNCisNCisgICAgICAgIFN0cmluZyByZXNvdXJjZVJlc29sdXRpb25JbnB1dENvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZygNCisgICAgICAgICAgICAgICAgbmV3IEZpbGUoInNyYy90ZXN0L3Jlc291cmNlcy9wYXlsb2FkL3JlcXVlc3RzL3NhbXBsZS1yZXNvdXJjZXJlc29sdXRpb24tcmVxdWVzdC5qc29uIiksIENoYXJzZXQuZGVmYXVsdENoYXJzZXQoKSk7DQorDQorICAgICAgICBSZXNvdXJjZVJlc29sdXRpb25JbnB1dCByZXNvdXJjZVJlc29sdXRpb25JbnB1dCA9IEphY2tzb25VdGlscy5yZWFkVmFsdWUocmVzb3VyY2VSZXNvbHV0aW9uSW5wdXRDb250ZW50LCBSZXNvdXJjZVJlc29sdXRpb25JbnB1dC5jbGFzcyApOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoImZhaWxlZCB0byBwb3B1bGF0ZSByZXNvdXJjZVJlc29sdXRpb25JbnB1dCByZXF1ZXN0ICIscmVzb3VyY2VSZXNvbHV0aW9uSW5wdXQpOw0KKw0KKyAgICAgICAgU3RyaW5nIHJlc291cmNlQXNzaWdubWVudENvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZygNCisgICAgICAgICAgICAgICAgbmV3IEZpbGUoInNyYy90ZXN0L3Jlc291cmNlcy9tYXBwaW5nL2RiL3Jlc291cmNlLWFzc2lnbm1lbnRzLXNpbXBsZS5qc29uIiksIENoYXJzZXQuZGVmYXVsdENoYXJzZXQoKSk7DQorICAgICAgICBMaXN0PFJlc291cmNlQXNzaWdubWVudD4gYmF0Y2hSZXNvdXJjZUFzc2lnbm1lbnQgPQ0KKyAgICAgICAgICAgICAgICBKYWNrc29uVXRpbHMuZ2V0TGlzdEZyb21Kc29uKHJlc291cmNlQXNzaWdubWVudENvbnRlbnQsIFJlc291cmNlQXNzaWdubWVudC5jbGFzcyk7DQorDQorICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiZmFpbGVkIHRvIGNyZWF0ZSBSZXNvdXJjZUFzc2lnbm1lbnQgZnJvbSBmaWxlIiwgQ29sbGVjdGlvblV0aWxzLmlzTm90RW1wdHkoYmF0Y2hSZXNvdXJjZUFzc2lnbm1lbnQpKTsNCisgICAgICAgIHJlc291cmNlUmVzb2x1dGlvbklucHV0LnNldFJlc291cmNlQXNzaWdubWVudHMoYmF0Y2hSZXNvdXJjZUFzc2lnbm1lbnQpOw0KKw0KKyAgICAgICAgT2JqZWN0Tm9kZSBpbnB1dENvbnRlbnQgPSAoT2JqZWN0Tm9kZSlKYWNrc29uVXRpbHMuanNvbk5vZGVGcm9tRmlsZSgic3JjL3Rlc3QvcmVzb3VyY2VzL3BheWxvYWQvaW5wdXRzL2lucHV0Lmpzb24iKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gcG9wdWxhdGUgaW5wdXQgcGF5bG9hZCAiLGlucHV0Q29udGVudCk7DQorICAgICAgICByZXNvdXJjZVJlc29sdXRpb25JbnB1dC5zZXRQYXlsb2FkKGlucHV0Q29udGVudCk7DQorICAgICAgICBsb2cuaW5mbygiUmVzb3VyY2VSZXNvbHV0aW9uSW5wdXQgOiB7fSIsIEphY2tzb25VdGlscy5nZXRKc29uKHJlc291cmNlUmVzb2x1dGlvbklucHV0LCB0cnVlKSk7DQorDQorICAgICAgICBSZXNvdXJjZVJlc29sdXRpb25PdXRwdXQgcmVzb3VyY2VSZXNvbHV0aW9uT3V0cHV0ID0gcmVzb3VyY2VSZXNvbHV0aW9uU2VydmljZS5yZXNvbHZlUmVzb3VyY2UocmVzb3VyY2VSZXNvbHV0aW9uSW5wdXQpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoImZhaWxlZCB0byBwb3B1bGF0ZSBvdXRwdXQiLHJlc291cmNlUmVzb2x1dGlvbk91dHB1dCk7DQorDQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvbWFwcGluZy9kYi9kYi1hcnJheS5qc29uIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvbWFwcGluZy9kYi9kYi1hcnJheS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OWI5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy90ZXN0L3Jlc291cmNlcy9tYXBwaW5nL2RiL2RiLWFycmF5Lmpzb24KQEAgLTAsMCArMSwzNSBAQAorew0KKwkibG9jYXRpb25zIjogew0KKwkJIm5hbWUiOiAibG9jYXRpb25zIiwNCisJCSJkYXRhLXR5cGUiOiAibGlzdCIsDQorCQkiZW50cnktc2NoZW1hIjogImR0LWxvY2F0aW9uIiwNCisJCSJzb3VyY2UiOiB7DQorCQkJImRiIjogew0KKwkJCQkicXVlcnkiOiAiU0VMRUNUIGRiLWNvdW50cnksIGRiLXN0YXRlIEZST00gREVWSUNFX1BST0ZJTEUgV0hFUkUgcHJvZmlsZV9uYW1lID0gOnByb2ZpbGVfbmFtZSIsDQorCQkJCSJpbnB1dC1rZXktbWFwcGluZyI6IHsNCisJCQkJCSJwcm9maWxlX25hbWUiOiAicHJvZmlsZV9uYW1lIg0KKwkJCQl9LA0KKwkJCQkib3V0cHV0LWtleS1tYXBwaW5nIjogew0KKwkJCQkJImRiLWNvdW50cnkiOiAiY291bnRyeSIsDQorCQkJCQkiZGItc3RhdGUiOiAic3RhdGUiDQorCQkJCX0NCisJCQl9DQorCQl9LA0KKwkJImNhbmRpZGF0ZS1kZXBlbmRlbmN5Ijogew0KKwkJCSJkYiI6IHsNCisJCQkJIm5hbWVzIjogWw0KKwkJCQkJInByb2ZpbGVfbmFtZSINCisJCQkJXQ0KKwkJCX0NCisJCX0NCisJfSwNCisJInByb2ZpbGVfbmFtZSI6IHsNCisJCSJuYW1lIjogInByb2ZpbGVfbmFtZSIsDQorCQkiZGF0YS10eXBlIjogInN0cmluZyIsDQorCQkic291cmNlIjogew0KKwkJCSJpbnB1dCI6IHsNCisJCQkJDQorCQkJfQ0KKwkJfQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9yZXNvbHV0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL21hcHBpbmcvZGIvZGItY29tcGxleC5qc29uIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvbWFwcGluZy9kYi9kYi1jb21wbGV4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkMDRiNgotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9yZXNvbHV0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL21hcHBpbmcvZGIvZGItY29tcGxleC5qc29uCkBAIC0wLDAgKzEsMjcgQEAKK3sNCisJImxvY2F0aW9uIjogew0KKwkJIm5hbWUiOiAibG9jYXRpb24iLA0KKwkJImRhdGEtdHlwZSI6ICJkdC1sb2NhdGlvbiIsDQorCQkic291cmNlIjogew0KKwkJCSJkYiI6IHsNCisJCQkJInF1ZXJ5IjogIlNFTEVDVCBkYi1jb3VudHJ5LCBkYi1zdGF0ZSBGUk9NIERFVklDRV9QUk9GSUxFIFdIRVJFIHByb2ZpbGVfbmFtZSA9IDpwcm9maWxlX25hbWUiLA0KKwkJCQkiaW5wdXQta2V5LW1hcHBpbmciOiB7DQorCQkJCQkicHJvZmlsZV9uYW1lIjogInByb2ZpbGVfbmFtZSINCisJCQkJfSwNCisJCQkJIm91dHB1dC1rZXktbWFwcGluZyI6IHsNCisJCQkJCSJkYi1jb3VudHJ5IjogImNvdW50cnkiLA0KKwkJCQkJImRiLXN0YXRlIjogInN0YXRlIg0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9LA0KKwkicHJvZmlsZV9uYW1lIjogew0KKwkJIm5hbWUiOiAicHJvZmlsZV9uYW1lIiwNCisJCSJkYXRhLXR5cGUiOiAic3RyaW5nIiwNCisJCSJzb3VyY2UiOiB7DQorCQkJImlucHV0Ijogew0KKwkJCQkNCisJCQl9DQorCQl9DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvbWFwcGluZy9kYi9kYi1zaW1wbGUuanNvbiBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9yZXNvbHV0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL21hcHBpbmcvZGIvZGItc2ltcGxlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxNDA0ZgotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9yZXNvbHV0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL21hcHBpbmcvZGIvZGItc2ltcGxlLmpzb24KQEAgLTAsMCArMSwyNiBAQAorew0KKwkiY291bnRyeSI6IHsNCisJCSJuYW1lIjogImNvdW50cnkiLA0KKwkJImRhdGEtdHlwZSI6ICJzdHJpbmciLA0KKwkJInNvdXJjZSI6IHsNCisJCQkiZGIiOiB7DQorCQkJCSJxdWVyeSI6ICJTRUxFQ1QgY291bnRyeSBGUk9NIERFVklDRV9QUk9GSUxFIFdIRVJFIHByb2ZpbGVfbmFtZSA9IDpwcm9maWxlX25hbWUiLA0KKwkJCQkiaW5wdXQta2V5LW1hcHBpbmciOiB7DQorCQkJCQkicHJvZmlsZV9uYW1lIjogInByb2ZpbGVfbmFtZSINCisJCQkJfSwNCisJCQkJIm91dHB1dC1rZXktbWFwcGluZyI6IHsNCisJCQkJCSJjb3VudHJ5IjogImNvdW50cnkiDQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0sDQorCSJwcm9maWxlX25hbWUiOiB7DQorCQkibmFtZSI6ICJwcm9maWxlX25hbWUiLA0KKwkJImRhdGEtdHlwZSI6ICJzdHJpbmciLA0KKwkJInNvdXJjZSI6IHsNCisJCQkiaW5wdXQiOiB7DQorCQkJCQ0KKwkJCX0NCisJCX0NCisJfQ0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy90ZXN0L3Jlc291cmNlcy9tYXBwaW5nL2RiL2R0LWxvY2F0aW9uLmpzb24gYi9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy90ZXN0L3Jlc291cmNlcy9tYXBwaW5nL2RiL2R0LWxvY2F0aW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlMGE3OQotLS0gL2Rldi9udWxsCisrKyBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvbW9kdWxlcy9zZXJ2aWNlcy9yZXNvbHV0aW9uLXNlcnZpY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL21hcHBpbmcvZGIvZHQtbG9jYXRpb24uanNvbgpAQCAtMCwwICsxLDE1IEBACit7DQorCSJ2ZXJzaW9uIjogIjEuMC4wIiwNCisJImRlc2NyaXB0aW9uIjogInRlc3QgRGF0YSBUeXBlIiwNCisJInByb3BlcnRpZXMiOiB7DQorCQkiY291bnRyeSI6IHsNCisJCQkicmVxdWlyZWQiOiB0cnVlLA0KKwkJCSJ0eXBlIjogInN0cmluZyINCisJCX0sDQorCQkic3RhdGUiOiB7DQorCQkJInJlcXVpcmVkIjogZmFsc2UsDQorCQkJInR5cGUiOiAic3RyaW5nIg0KKwkJfQ0KKwl9LA0KKwkiZGVyaXZlZF9mcm9tIjogInRvc2NhLmRhdGF0eXBlcy5Sb290Ig0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy90ZXN0L3Jlc291cmNlcy9tYXBwaW5nL2RiL3Jlc291cmNlLWFzc2lnbm1lbnRzLXNpbXBsZS5qc29uIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvbWFwcGluZy9kYi9yZXNvdXJjZS1hc3NpZ25tZW50cy1zaW1wbGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmNlNjhiCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvbWFwcGluZy9kYi9yZXNvdXJjZS1hc3NpZ25tZW50cy1zaW1wbGUuanNvbgpAQCAtMCwwICsxLDEyIEBACitbDQorCXsNCisJCSJuYW1lIjogImNvdW50cnkiLA0KKwkJImlucHV0LXBhcmFtIjogdHJ1ZSwNCisJCSJwcm9wZXJ0eSI6IHsNCisJCQkidHlwZSI6ICJzdHJpbmciDQorCQl9LA0KKwkJImRpY3Rpb25hcnktbmFtZSI6ICJjb3VudHJ5IiwNCisJCSJkaWN0aW9uYXJ5LXNvdXJjZSI6ICJkYiIsDQorCQkiZGVwZW5kZW5jaWVzIjogW10NCisJfQ0KK10NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy90ZXN0L3Jlc291cmNlcy9wYXlsb2FkL2lucHV0cy9pbnB1dC5qc29uIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvcGF5bG9hZC9pbnB1dHMvaW5wdXQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDZmYWMxCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvcGF5bG9hZC9pbnB1dHMvaW5wdXQuanNvbgpAQCAtMCwwICsxLDE4IEBACit7DQorCSJhcGktdmVyIjogIjIuMDAiLA0KKwkib3JpZ2luYXRvci1pZCI6ICJNU08iLA0KKwkicmVxdWVzdC1pZCI6ICIxMjM0NTYiLA0KKwkic2VydmljZS1pbnN0YW5jZS1pZCI6ICJpYmN4MDAwMXZtMDAxIiwNCisJInNlcnZpY2UtdHlwZSI6ICJBVlBOIiwNCisJInZuZi10eXBlIjogInZVU1AgLSB2REJFLUlQWCBIVUIiLA0KKwkidm5mLWlkIjogMTIzNDU2LA0KKwkic2VydmljZS10ZW1wbGF0ZS1uYW1lIjogIlZSUi1iYXNlY29uZmlndXJhdGlvbiIsDQorCSJzZXJ2aWNlLXRlbXBsYXRlLXZlcnNpb24iOiAiMS4wLjAiLA0KKwkiYWN0aW9uLW5hbWUiOiAicmVzb3VyY2UtYXNzaWdubWVudC1hY3Rpb24iLA0KKwkiZ3JvdXAtbmFtZSI6ICJzYW1wbGUgZ3JvdXAgbmFtZSIsDQorCSJidW5kbGUtaWQiOiAic2FtcGxlIGJ1bmRsZSBpZCIsDQorCSJidW5kbGUtbWFjIjogWw0KKwkJIlNhbXBsZSBidW5kbGUgbWFjIiwNCisJCSJTYW1wbGUgYnVuZGxlIG1hYyINCisJXQ0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL21vZHVsZXMvc2VydmljZXMvcmVzb2x1dGlvbi1zZXJ2aWNlL3NyYy90ZXN0L3Jlc291cmNlcy9wYXlsb2FkL3JlcXVlc3RzL3NhbXBsZS1yZXNvdXJjZXJlc29sdXRpb24tcmVxdWVzdC5qc29uIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvcGF5bG9hZC9yZXF1ZXN0cy9zYW1wbGUtcmVzb3VyY2VyZXNvbHV0aW9uLXJlcXVlc3QuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODgzMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9tb2R1bGVzL3NlcnZpY2VzL3Jlc29sdXRpb24tc2VydmljZS9zcmMvdGVzdC9yZXNvdXJjZXMvcGF5bG9hZC9yZXF1ZXN0cy9zYW1wbGUtcmVzb3VyY2VyZXNvbHV0aW9uLXJlcXVlc3QuanNvbgpAQCAtMCwwICsxLDIyIEBACit7DQorICAiYWN0aW9uSWRlbnRpZmllcnMiOiB7DQorICAgICJhY3Rpb25OYW1lIjogInNhbXBsZS1hY3Rpb24iLA0KKyAgICAiYmx1ZXByaW50TmFtZSI6ICJzYW1wbGUtYmx1cnByaW50IiwNCisgICAgImJsdWVwcmludFZlcnNpb24iOiAiMS4wLjAiLA0KKyAgICAibW9kZSI6ICJzeW5jIg0KKyAgfSwNCisgICJjb21tb25IZWFkZXIiOiB7DQorICAgICJmbGFncyI6IHsNCisgICAgICAiZm9yY2UiOiB0cnVlLA0KKyAgICAgICJ0dGwiOiAzNjAwDQorICAgIH0sDQorICAgICJvcmlnaW5hdG9ySWQiOiAic2RuYyIsDQorICAgICJyZXF1ZXN0SWQiOiAiMTIzNDU2LTEwMDAiLA0KKyAgICAic3ViUmVxdWVzdElkIjogInN1Yi0xMjM0NTYtMTAwMCIsDQorICAgICJ0aW1lc3RhbXAiOiAiMjAxMi0wNC0yM1QxODoyNTo0My41MTFaIg0KKyAgfSwNCisgICJwYXlsb2FkIjogew0KKyAgfSwNCisgICJyZXNvdXJjZUFzc2lnbm1lbnRzIjogWw0KKyAgXQ0KK30NCmRpZmYgLS1naXQgYS9tcy9ibHVlcHJpbnRzcHJvY2Vzc29yL3BhcmVudC9wb20ueG1sIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9wYXJlbnQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmM4ZTBjCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9wYXJlbnQvcG9tLnhtbApAQCAtMCwwICsxLDIzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgfiAgQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4KKyAgfgorICB+ICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgfiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+ICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICB+ICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+ICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgfiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICB+ICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorICAgIDx2ZXJzaW9uPjAuMC4zLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8YXJ0aWZhY3RJZD5wYXJlbnQ8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5CbHVlcHJpbnRzIFByb2Nlc3NvciBQYXJlbnQ8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkJsdWVwcmludHMgUHJvY2Vzc29yIFBhcmVudDwvZGVzY3JpcHRpb24+CisgICAgPHByb3BlcnRpZXM+CisgICAgICAgIDxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPlVURi04PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPgorICAgICAgICA8cHJvamVjdC5yZXBvcnRpbmcub3V0cHV0RW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QucmVwb3J0aW5nLm91dHB1dEVuY29kaW5nPgorICAgICAgICA8bWF2ZW4uY29tcGlsZXIudGFyZ2V0PjEuODwvbWF2ZW4uY29tcGlsZXIudGFyZ2V0PgorICAgICAgICA8bWF2ZW4uY29tcGlsZXIuc291cmNlPjEuODwvbWF2ZW4uY29tcGlsZXIuc291cmNlPgorICAgICAgICA8amF2YS52ZXJzaW9uPjEuODwvamF2YS52ZXJzaW9uPgorICAgICAgICA8Y29udHJvbGxlcmJsdWVwcmludHMudmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvY29udHJvbGxlcmJsdWVwcmludHMudmVyc2lvbj4KKyAgICAgICAgPHNwcmluZy5ib290LnZlcnNpb24+Mi4wLjQuUkVMRUFTRTwvc3ByaW5nLmJvb3QudmVyc2lvbj4KKyAgICAgICAgPGtvdGxpbi52ZXJzaW9uPjEuMi42MDwva290bGluLnZlcnNpb24+CisgICAgICAgIDxzcHJpbmdmb3guc3dhZ2dlcjIudmVyc2lvbj4yLjkuMjwvc3ByaW5nZm94LnN3YWdnZXIyLnZlcnNpb24+CisgICAgICAgIDxoMmRhdGFiYXNlLnZlcnNpb24+MS40LjE5NzwvaDJkYXRhYmFzZS52ZXJzaW9uPgorICAgIDwvcHJvcGVydGllcz4KKyAgICA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+CisgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICA8IS0tIEFwcGxpY2F0aW9uIE1vZHVsZSBEZXBlbmRlbmNpZXMgLS0+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZGItbGliPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5yZXN0LWxpYjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZGItc2VydmljZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlY3V0aW9uLXNlcnZpY2U8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwcy5ibHVlcHJpbnRzcHJvY2Vzc29yPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnJlc29sdXRpb24tc2VydmljZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzLmJsdWVwcmludHNwcm9jZXNzb3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+cmVzb3VyY2UtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5vbmFwLmNjc2RrLmFwcHMuYmx1ZXByaW50c3Byb2Nlc3NvcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZWxmc2VydmljZS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgICAgICA8IS0tIEFwcGxpY2F0aW9uIENvbXBvbmVudCBEZXBlbmRlbmN5IC0tPgorICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9uYXAuY2NzZGsuYXBwczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb250cm9sbGVyYmx1ZXByaW50cy1yZXNvdXJjZS1kaWN0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y29udHJvbGxlcmJsdWVwcmludHMudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgICAgIDwhLS1Td2FnZ2VyIERlcGVuZGVuY2llcyAtLT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPmlvLnNwcmluZ2ZveDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmdmb3gtc3dhZ2dlcjI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzcHJpbmdmb3guc3dhZ2dlcjIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pby5zcHJpbmdmb3g8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nZm94LXN3YWdnZXItdWk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzcHJpbmdmb3guc3dhZ2dlcjIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgICAgIDwhLS0gU3ByaW5nIEJvb3QgLS0+CisKKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLXBhcmVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NwcmluZy5ib290LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgICAgICA8c2NvcGU+aW1wb3J0PC9zY29wZT4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5qZXRicmFpbnMua290bGluPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmtvdGxpbi1zdGRsaWItamRrODwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2tvdGxpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5qZXRicmFpbnMua290bGluPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmtvdGxpbi1yZWZsZWN0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7a290bGluLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgPCEtLSBEYXRhYmFzZSAtLT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5oMmRhdGFiYXNlPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmgyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7aDJkYXRhYmFzZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDwhLS0gVGVzdCBEZXBlbmRlbmN5IC0tPgorICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpldGJyYWlucy5rb3RsaW48L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+a290bGluLXRlc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtrb3RsaW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8L2RlcGVuZGVuY2llcz4KKyAgICA8L2RlcGVuZGVuY3lNYW5hZ2VtZW50PgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jb21tb25zPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sYW5nMzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29sbGVjdGlvbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjIuMjwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtaW88L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWlvPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi42PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS52ZWxvY2l0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnZlbG9jaXR5PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS43PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5pby5zcHJpbmdmb3g8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmdmb3gtc3dhZ2dlcjI8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5pby5zcHJpbmdmb3g8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmdmb3gtc3dhZ2dlci11aTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci10ZXN0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpldGJyYWlucy5rb3RsaW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rb3RsaW4tdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7a290bGluLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+aW8ucHJvamVjdHJlYWN0b3I8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5yZWFjdG9yLXRlc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuamV0YnJhaW5zLmtvdGxpbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmtvdGxpbi1zdGRsaWItamRrODwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7a290bGluLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpldGJyYWlucy5rb3RsaW48L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+a290bGluLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2tvdGxpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5jb21waWxlPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmNvbXBpbGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZURpcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2VEaXI+JHtwcm9qZWN0LmJhc2VkaXJ9L3NyYy9tYWluL2tvdGxpbjwvc291cmNlRGlyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlRGlyPiR7cHJvamVjdC5iYXNlZGlyfS9zcmMvbWFpbi9qYXZhPC9zb3VyY2VEaXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2VEaXJzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD50ZXN0LWNvbXBpbGU8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnRlc3QtY29tcGlsZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlRGlycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZURpcj4ke3Byb2plY3QuYmFzZWRpcn0vc3JjL3Rlc3Qva290bGluPC9zb3VyY2VEaXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2VEaXI+JHtwcm9qZWN0LmJhc2VkaXJ9L3NyYy90ZXN0L2phdmE8L3NvdXJjZURpcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZURpcnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuNS4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c291cmNlPiR7bWF2ZW4uY29tcGlsZXIuc291cmNlfTwvc291cmNlPgorICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PiR7bWF2ZW4uY29tcGlsZXIudGFyZ2V0fTwvdGFyZ2V0PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21zL2JsdWVwcmludHNwcm9jZXNzb3IvcG9tLnhtbCBiL21zL2JsdWVwcmludHNwcm9jZXNzb3IvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk4MGJlCi0tLSAvZGV2L251bGwKKysrIGIvbXMvYmx1ZXByaW50c3Byb2Nlc3Nvci9wb20ueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIH4gIENvcHlyaWdodCDCqSAyMDE3LTIwMTggQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuCisgIH4KKyAgfiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwk8cGFyZW50PgorCQk8Z3JvdXBJZD5vcmcub25hcC5jY3Nkay5hcHBzPC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5jY3Nkay1hcHBzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKwk8YXJ0aWZhY3RJZD5ibHVlcHJpbnRzcHJvY2Vzc29yPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisJPG5hbWU+Qmx1ZXByaW50cyBQcm9jZXNzb3IgUE9NPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5CbHVlcHJpbnRzIFByb2Nlc3NvciBQT008L2Rlc2NyaXB0aW9uPgorCisJPHByb3BlcnRpZXM+CisJCTxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPlVURi04PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPgorCQk8bWF2ZW4uY29tcGlsZXIudGFyZ2V0PjEuODwvbWF2ZW4uY29tcGlsZXIudGFyZ2V0PgorCQk8bWF2ZW4uY29tcGlsZXIuc291cmNlPjEuODwvbWF2ZW4uY29tcGlsZXIuc291cmNlPgorCQk8a290bGluLnZlcnNpb24+MS4yLjYwPC9rb3RsaW4udmVyc2lvbj4KKwk8L3Byb3BlcnRpZXM+CisKKwk8bW9kdWxlcz4KKwkJPG1vZHVsZT5wYXJlbnQ8L21vZHVsZT4KKwkJPG1vZHVsZT5tb2R1bGVzPC9tb2R1bGU+CisJCTxtb2R1bGU+YXBwbGljYXRpb248L21vZHVsZT4KKwk8L21vZHVsZXM+CisKKzwvcHJvamVjdD4K